/*
 * @描述: 用户权限中抽取部分方法ts文件
 * @作者: 研发中心
 * @Date: 2019-12-06 15:02:32
 */
import vueAxios from "@/api/index";
import global from "@/utils/SnowflakeClass";

/**
 * @名字:getRoleList
 * @详情:所有角色数据
 * @参数: 无
 * @返回值: 无
 */
export const getRoleList = (): Promise<any[]> => {
  return new Promise((resolve, reject) => {
    vueAxios.get("Master_Base_Groups/Get", { order: "G_Order asc" }, { noLoading: true }).then((res: any) => {
      resolve(res.List);
    });
  });
};

/**
 * @名字: getGUID
 * @详情: 根据用户id获取对应的GU_ID
 * @参数: userID 用户id
 * @返回值: 角色id集合
 */
export const getGUID = (uId: string): Promise<any> => {
  const param = { order: "GU_ID asc", dtoList: [{ fieldName: "U_ID", fieldValue: uId }] };
  return new Promise((resolve, reject) => {
    vueAxios.post("Master_Base_Group_User/GetConditional", param, { noLoading: true }).then(res => {
      resolve(res);
    });
  });
};

/**
 * @名字: getRoleBymodal
 * @详情: 根据用户id获取对应的角色
 * @参数: userID 用户id
 * @返回值: 角色id集合
 */
export const getRoleByUserId = async (userId: string) => {
  const ids = [] as string[];
  const res = await getGUID(userId);
  for (let i = 0; i < res.List.length; i++) {
    const res2 = (await vueAxios.get("Master_Base_Groups/GetById", { objId: res.List[i].G_ID }, { noLoading: true })) as any;
    ids.push(res2.Model.G_ID);
  }
  return ids;
};

/**
 * @名字:saveRole
 * @详情:保存用户下的角色权限
 * @参数: RoleList 角色数据List集合 userID 代表当前选中的用户ID
 * @返回值: 无
 */
export const saveRole = async (RoleIDList: string[], userID: string) => {
  // 先删除之前所有存储的数据
  await delRole(userID);
  const params = [] as any[];
  RoleIDList.forEach(item => {
    params.push({ gU_ID: global.createID(), g_ID: item, u_ID: userID });
  });
  // 保存处理之后的数据
  if (params.length > 0) {
    await vueAxios.post("Master_Base_Group_User/AddList", params, { noLoading: true });
  }
};

/**
 * @详情: 保存role时先删除旧数据
 * @参数: userID 用户id
 * @返回值: 无
 */
export const delRole = async (userID: string) => {
  const res = await getGUID(userID);
  await vueAxios.post(
    "Master_Base_Group_User/Delete",
    res.List.map((item: any) => item.GU_ID),
    {
      noLoading: true
    }
  );
};
